home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.extensibility.rock; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.beans.PropertyChangeListener; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.Enumeration; import java.util.Hashtable; import java.util.Vector; import javax.accessibility.AccessibleContext; import javax.accessibility.AccessibleState; import javax.swing.AbstractButton; import javax.swing.Action; import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import javax.swing.MenuElement; import javax.swing.MenuSelectionManager; import javax.swing.UIManager; import javax.swing.event.ChangeListener; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; import javax.swing.plaf.MenuItemUI; import javax.swing.plaf.PopupMenuUI; public class RJMenu extends JMenu { private static final String uiClassID = "MenuUI"; private JPopupMenu popupMenu; private ChangeListener menuChangeListener; private MenuEvent menuEvent; private static Hashtable listenerRegistry = null; private int delay; public RJMenu() { this(""); } public RJMenu(String var1) { super(var1); this.menuChangeListener = null; this.menuEvent = null; } public RJMenu(String var1, boolean var2) { this(var1); } public void updateUI() { ((JMenuItem)this).setUI((MenuItemUI)UIManager.getUI(this)); if (this.popupMenu != null) { this.popupMenu.setUI((PopupMenuUI)UIManager.getUI(this.popupMenu)); } } public String getUIClassID() { return "MenuUI"; } public void setModel(ButtonModel var1) { ButtonModel var2 = ((AbstractButton)this).getModel(); super.setModel(var1); if (var2 != null && this.menuChangeListener != null) { var2.removeChangeListener(this.menuChangeListener); this.menuChangeListener = null; } super.model = var1; if (var1 != null) { this.menuChangeListener = this.createMenuChangeListener(); var1.addChangeListener(this.menuChangeListener); } } public boolean isSelected() { return ((AbstractButton)this).getModel().isSelected(); } public void setSelected(boolean var1) { ButtonModel var2 = ((AbstractButton)this).getModel(); boolean var3 = var2.isSelected(); if (super.accessibleContext != null && var3 != var1) { if (var1) { super.accessibleContext.firePropertyChange("AccessibleState", (Object)null, AccessibleState.SELECTED); } else { super.accessibleContext.firePropertyChange("AccessibleState", AccessibleState.SELECTED, (Object)null); } } if (var1 != var2.isSelected()) { ((AbstractButton)this).getModel().setSelected(var1); } } public boolean isPopupMenuVisible() { this.ensurePopupMenuCreated(); return this.popupMenu.isVisible(); } public void setPopupMenuVisible(boolean var1) { if (((Component)this).isEnabled()) { boolean var2 = this.isPopupMenuVisible(); if (var1 != var2) { this.ensurePopupMenuCreated(); if (var1 && ((Component)this).isShowing()) { Point var3 = this.getPopupMenuOrigin(); this.getPopupMenu().show(this, var3.x, var3.y); } else { this.getPopupMenu().setVisible(false); } } } } private Point getPopupMenuOrigin() { int var1 = 0; int var2 = 0; JPopupMenu var3 = this.getPopupMenu(); Dimension var4 = Toolkit.getDefaultToolkit().getScreenSize(); Dimension var5 = ((Component)this).getSize(); Dimension var6 = ((Component)var3).getSize(); if (var6.width == 0) { var6 = ((JComponent)var3).getPreferredSize(); } Point var7 = ((Component)this).getLocationOnScreen(); Container var8 = ((Component)this).getParent(); if (var8 instanceof JPopupMenu) { if (var7.x + var5.width + var6.width < var4.width) { var1 = var5.width; } else { var1 = 0 - var6.width; } if (var7.y + var6.height < var4.height) { var2 = 0; } else { var2 = var5.height - var6.height; } } else { if (var7.x + var6.width < var4.width) { var1 = 0; } else { var1 = var5.width - var6.width; } if (var7.y + var5.height + var6.height < var4.height) { var2 = var5.height; } else { var2 = 0 - var6.height; } } return new Point(var1, var2); } public int getDelay() { return this.delay; } public void setDelay(int var1) { if (var1 < 0) { throw new IllegalArgumentException("Delay must be a positive integer"); } else { this.delay = var1; } } private void ensurePopupMenuCreated() { if (this.popupMenu == null) { this.popupMenu = new JPopupMenu(); this.popupMenu.setInvoker(this); super.popupListener = ((JMenu)this).createWinListener(this.popupMenu); this.popupMenu.addPopupMenuListener(new 1(this)); } } public void setMenuLocation(int var1, int var2) { if (this.popupMenu != null) { this.popupMenu.setLocation(var1, var2); } } public JMenuItem add(JMenuItem var1) { AccessibleContext var2 = var1.getAccessibleContext(); var2.setAccessibleParent(this); this.ensurePopupMenuCreated(); return this.popupMenu.add(var1); } public Component add(Component var1) { if (var1 instanceof JComponent) { AccessibleContext var2 = ((JComponent)var1).getAccessibleContext(); if (var2 != null) { var2.setAccessibleParent(this); } } this.ensurePopupMenuCreated(); this.popupMenu.add(var1); return var1; } public JMenuItem add(String var1) { return this.add(new JMenuItem(var1)); } public JMenuItem add(Action var1) { JMenuItem var2 = new JMenuItem((String)var1.getValue("Name"), (Icon)var1.getValue("SmallIcon")); ((AbstractButton)var2).setHorizontalTextPosition(4); ((AbstractButton)var2).setVerticalTextPosition(0); var2.setEnabled(var1.isEnabled()); ((AbstractButton)var2).addActionListener(var1); this.add(var2); this.registerMenuItemForAction(var2, var1); return var2; } protected PropertyChangeListener createActionChangeListener(JMenuItem var1) { return new ActionChangedListener(var1); } public void addSeparator() { this.ensurePopupMenuCreated(); this.popupMenu.addSeparator(); } public void insert(String var1, int var2) { if (var2 < 0) { throw new IllegalArgumentException("index less than zero."); } else { this.ensurePopupMenuCreated(); this.popupMenu.insert(new JMenuItem(var1), var2); } } public JMenuItem insert(JMenuItem var1, int var2) { if (var2 < 0) { throw new IllegalArgumentException("index less than zero."); } else { AccessibleContext var3 = var1.getAccessibleContext(); var3.setAccessibleParent(this); this.ensurePopupMenuCreated(); this.popupMenu.insert(var1, var2); return var1; } } public JMenuItem insert(Action var1, int var2) { if (var2 < 0) { throw new IllegalArgumentException("index less than zero."); } else { this.ensurePopupMenuCreated(); JMenuItem var3 = new JMenuItem((String)var1.getValue("Name"), (Icon)var1.getValue("SmallIcon")); ((AbstractButton)var3).setHorizontalTextPosition(4); ((AbstractButton)var3).setVerticalTextPosition(0); var3.setEnabled(var1.isEnabled()); ((AbstractButton)var3).addActionListener(var1); this.popupMenu.insert(var3, var2); this.registerMenuItemForAction(var3, var1); return var3; } } private void registerMenuItemForAction(JMenuItem var1, Action var2) { PropertyChangeListener var3 = this.createActionChangeListener(var1); if (listenerRegistry == null) { listenerRegistry = new Hashtable(); } listenerRegistry.put(var1, var3); listenerRegistry.put(var3, var2); var2.addPropertyChangeListener(var3); } private void unregisterMenuItemForAction(JMenuItem var1) { if (listenerRegistry != null) { ActionChangedListener var2 = (ActionChangedListener)listenerRegistry.remove(var1); if (var2 != null) { Action var3 = (Action)listenerRegistry.remove(var2); if (var3 != null) { ((AbstractButton)var1).removeActionListener(var3); var3.removePropertyChangeListener(var2); } var2.setTarget((JMenuItem)null); } } } private void clearListenerRegistry() { if (listenerRegistry != null) { Enumeration var1 = listenerRegistry.keys(); while(var1.hasMoreElements()) { Object var2 = var1.nextElement(); if (var2 == this) { JMenuItem var3 = (JMenuItem)var2; ActionChangedListener var4 = (ActionChangedListener)listenerRegistry.get(var3); if (var4 != null) { Action var5 = (Action)listenerRegistry.get(var4); if (var5 != null) { ((AbstractButton)var3).removeActionListener(var5); var5.removePropertyChangeListener(var4); } var4.setTarget((JMenuItem)null); } } } listenerRegistry.clear(); } } public void insertSeparator(int var1) { if (var1 < 0) { throw new IllegalArgumentException("index less than zero."); } else { this.ensurePopupMenuCreated(); this.popupMenu.insert(new JPopupMenu.Separator(), var1); } } public JMenuItem getItem(int var1) { if (var1 < 0) { throw new IllegalArgumentException("index less than zero."); } else { Component var2 = this.getMenuComponent(var1); if (var2 instanceof JMenuItem) { JMenuItem var3 = (JMenuItem)var2; return var3; } else { return null; } } } public int getItemCount() { return this.getMenuComponentCount(); } public boolean isTearOff() { throw new Error("boolean isTearOff() {} not yet implemented"); } public void remove(JMenuItem var1) { if (this.popupMenu != null) { this.popupMenu.remove(var1); } this.unregisterMenuItemForAction(var1); } public void remove(int var1) { if (var1 < 0) { throw new IllegalArgumentException("index less than zero."); } else if (var1 > this.getItemCount()) { throw new IllegalArgumentException("index greater than the number of items."); } else { JMenuItem var2 = this.getItem(var1); if (var2 instanceof JMenuItem) { this.unregisterMenuItemForAction(var2); } if (this.popupMenu != null) { this.popupMenu.remove(var1); } } } public void remove(Component var1) { if (this.popupMenu != null) { this.popupMenu.remove(var1); } } public void removeAll() { if (this.popupMenu != null) { this.popupMenu.removeAll(); } this.clearListenerRegistry(); } public int getMenuComponentCount() { int var1 = 0; if (this.popupMenu != null) { var1 = this.popupMenu.getComponentCount(); } return var1; } public Component getMenuComponent(int var1) { return this.popupMenu != null ? this.popupMenu.getComponent(var1) : null; } public Component[] getMenuComponents() { return this.popupMenu != null ? this.popupMenu.getComponents() : new Component[0]; } public boolean isTopLevelMenu() { return ((Component)this).getParent() instanceof JMenuBar; } public boolean isMenuComponent(Component var1) { if (var1 == this) { return true; } else { if (var1 instanceof JPopupMenu) { JPopupMenu var2 = (JPopupMenu)var1; if (var2 == this.getPopupMenu()) { return true; } } int var7 = this.getMenuComponentCount(); Component[] var3 = this.getMenuComponents(); for(int var4 = 0; var4 < var7; ++var4) { Component var5 = var3[var4]; if (var5 == var1) { return true; } if (var5 instanceof RJMenu) { RJMenu var6 = (RJMenu)var5; if (var6.isMenuComponent(var1)) { return true; } } } return false; } } private Point translateToPopupMenu(Point var1) { return this.translateToPopupMenu(var1.x, var1.y); } private Point translateToPopupMenu(int var1, int var2) { int var3; int var4; if (((Component)this).getParent() instanceof JPopupMenu) { var3 = var1 - ((Component)this).getSize().width; var4 = var2; } else { var3 = var1; var4 = var2 - ((Component)this).getSize().height; } return new Point(var3, var4); } public JPopupMenu getPopupMenu() { this.ensurePopupMenuCreated(); return this.popupMenu; } public void addMenuListener(MenuListener var1) { super.listenerList.add(Class.forName("javax.swing.event.MenuListener"), var1); } public void removeMenuListener(MenuListener var1) { super.listenerList.remove(Class.forName("javax.swing.event.MenuListener"), var1); } protected void fireMenuSelected() { Object[] var1 = super.listenerList.getListenerList(); for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) { if (var1[var2] == Class.forName("javax.swing.event.MenuListener")) { if (var1[var2 + 1] == null) { throw new Error(String.valueOf(String.valueOf(((AbstractButton)this).getText()).concat(String.valueOf(" has a NULL Listener!! "))).concat(String.valueOf(var2))); } if (this.menuEvent == null) { this.menuEvent = new MenuEvent(this); } ((MenuListener)var1[var2 + 1]).menuSelected(this.menuEvent); } } } protected void fireMenuDeselected() { Object[] var1 = super.listenerList.getListenerList(); for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) { if (var1[var2] == Class.forName("javax.swing.event.MenuListener")) { if (var1[var2 + 1] == null) { throw new Error(String.valueOf(String.valueOf(((AbstractButton)this).getText()).concat(String.valueOf(" has a NULL Listener!! "))).concat(String.valueOf(var2))); } if (this.menuEvent == null) { this.menuEvent = new MenuEvent(this); } ((MenuListener)var1[var2 + 1]).menuDeselected(this.menuEvent); } } } protected void fireMenuCanceled() { Object[] var1 = super.listenerList.getListenerList(); for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) { if (var1[var2] == Class.forName("javax.swing.event.MenuListener")) { if (var1[var2 + 1] == null) { throw new Error(String.valueOf(String.valueOf(((AbstractButton)this).getText()).concat(String.valueOf(" has a NULL Listener!! "))).concat(String.valueOf(var2))); } if (this.menuEvent == null) { this.menuEvent = new MenuEvent(this); } ((MenuListener)var1[var2 + 1]).menuCanceled(this.menuEvent); } } } private ChangeListener createMenuChangeListener() { return new MenuChangeListener(this); } public void menuSelectionChanged(boolean var1) { this.setSelected(var1); } public MenuElement[] getSubElements() { if (this.popupMenu == null) { return new MenuElement[0]; } else { MenuElement[] var1 = new MenuElement[]{this.popupMenu}; return var1; } } public Component getComponent() { return this; } public void setAccelerator(KeyStroke var1) { throw new Error("setAccelerator() is not defined for JMenu. Use setMnemonic() instead."); } protected void processKeyEvent(KeyEvent var1) { MenuSelectionManager.defaultManager().processKeyEvent(var1); if (!((InputEvent)var1).isConsumed()) { if (this.isSelected() && (var1.getKeyCode() == 9 || var1.getKeyChar() == '\t')) { if ((Boolean)UIManager.get("Menu.consumesTabs") == Boolean.TRUE) { ((InputEvent)var1).consume(); return; } MenuSelectionManager.defaultManager().clearSelectedPath(); } super.processKeyEvent(var1); } } public void doClick(int var1) { MenuElement[] var2 = this.buildMenuElementArray(this); MenuSelectionManager.defaultManager().setSelectedPath(var2); } private MenuElement[] buildMenuElementArray(RJMenu var1) { Vector var2 = new Vector(); Object var3 = var1.getPopupMenu(); while(true) { while(!(var3 instanceof JPopupMenu)) { if (var3 instanceof RJMenu) { RJMenu var5 = (RJMenu)var3; var2.insertElementAt(var5, 0); var3 = ((Component)var5).getParent(); } else if (var3 instanceof JMenuBar) { JMenuBar var6 = (JMenuBar)var3; var2.insertElementAt(var6, 0); MenuElement[] var7 = new MenuElement[var2.size()]; var2.copyInto(var7); return var7; } } JPopupMenu var4 = (JPopupMenu)var3; var2.insertElementAt(var4, 0); var3 = var4.getInvoker(); } } private void writeObject(ObjectOutputStream var1) throws IOException { var1.defaultWriteObject(); if (super.ui != null && this.getUIClassID().equals("MenuUI")) { super.ui.installUI(this); } } protected String paramString() { return super.paramString(); } }